package JavaSE.CODE.javaCollection;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * 存储的是键值对
 * 键不能重复，值可以重复
 * 无序
 */
public class MapDemo {
    public static void main(String[] args) {
        //创建集合
        Map<String, String> map = new HashMap<>();
        map.put("cn","中国");
        map.put("uk","英国");
        map.put("usa","美国");
        map.put("usa","meiguo");//相同的键会覆盖

        System.out.println(map.size());
        System.out.println(map.toString());

        //直接删掉键值对
        map.remove("usa");
        System.out.println(map.toString());

        //遍历Map
        //1 键集合：keySet()  Set类型就可以迭代器or foreach
        //通过键集合遍历+根据键获取值
        /* 迭代器方式
        Set<String> keySet = map.keySet();
        Iterator<String> iterator = keySet.iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println(key+":"+map.get(key));
        }
        */
        //增强for方式
        for (String s : map.keySet()) {
            System.out.println(s+":"+map.get(s));
        }

        //2 键值对封装类型：（效率更高，1还要查找）
        //把键值对封装在一起，叫做entry。它的类型是Map.Entry<T,E>
        //通过entry键值对直接获得键和值
        Set<Map.Entry<String,String>> entries= map.entrySet();
        //Entry也是一个接口，即Map接口中的接口
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println(map.containsKey("cn"));
        System.out.println(map.containsValue("taiguo"));
    }
}
